#include "usermanager.h"
#include <QRegExp>

UserManager::UserManager(QObject *parent)
    : QObject(parent)
    , m_dbManager(new DatabaseManager(this))
{
}

UserManager::~UserManager()
{
}

bool UserManager::authenticateUser(const QString &username, const QString &password)
{
    // 从数据库查找用户
    User user = m_dbManager->findUserByUsername(username);
    
    // 检查用户是否存在
    if (user.getId() == 0) {
        return false;
    }
    
    // 验证密码
    if (user.validatePassword(password)) {
        m_currentUser = user;
        return true;
    }
    
    return false;
}

bool UserManager::registerUser(const QString &username, const QString &password)
{
    // 验证用户名格式
    if (!validateUsernameFormat(username)) {
        return false;
    }
    
    // 验证密码强度
    if (!validatePasswordStrength(password)) {
        return false;
    }
    
    // 检查用户名是否已存在
    if (m_dbManager->isUsernameExists(username)) {
        return false;
    }
    
    // 创建新用户
    User newUser(0, username, password, QDateTime::currentDateTime());
    
    // 添加到数据库
    return m_dbManager->addUser(newUser);
}

bool UserManager::addUser(const User &user)
{
    return m_dbManager->addUser(user);
}

bool UserManager::removeUser(int userId)
{
    // 获取要删除的用户信息
    User user = m_dbManager->findUserById(userId);
    
    // 不允许删除管理员用户
    if (user.getUsername() == "admin") {
        return false;
    }
    
    return m_dbManager->removeUser(userId);
}

bool UserManager::updateUser(const User &user)
{
    return m_dbManager->updateUser(user);
}

User UserManager::findUserByUsername(const QString &username)
{
    return m_dbManager->findUserByUsername(username);
}

User UserManager::findUserById(int userId)
{
    return m_dbManager->findUserById(userId);
}

QList<User> UserManager::getAllUsers()
{
    return m_dbManager->getAllUsers();
}

bool UserManager::isUsernameExists(const QString &username)
{
    return m_dbManager->isUsernameExists(username);
}

bool UserManager::isAdmin(const QString &username)
{
    return username == "admin";
}

bool UserManager::canManageUsers(const QString &username)
{
    return isAdmin(username);
}

bool UserManager::validateUsernameFormat(const QString &username)
{
    // 检查用户名长度
    if (username.length() < 3 || username.length() > 20) {
        return false;
    }
    
    // 检查用户名格式（只允许字母、数字和下划线）
    QRegExp usernameRegex("[a-zA-Z0-9_]{3,20}");
    return usernameRegex.exactMatch(username);
}

bool UserManager::validatePasswordStrength(const QString &password)
{
    // 检查密码长度
    if (password.length() < 6 || password.length() > 20) {
        return false;
    }
    
    // 可以添加更多密码强度检查
    // 例如：必须包含大小写字母、数字等
    
    return true;
}
